[WordPress開発] パーマリンクに日本語が含まれているときに警告を出す
パーマリンクとは
ブログを作る上でよく使われる、オープンソースソフトウェアである「WordPress」の、ちょっとした開発ネタを書きたいと思います。
WordPressの設定では、パーマリンクを有効化しているWebサイトも多いかと思います。ちなみにパーマリンクとは、以下のようなものです。
パーマリンクとは、Webページの中の個別のコンテンツに対して設けられたURLのことである。特に、ブログにおける個々のエントリー(毎日の記述)に対して割り当てられたURLを指すことが多い。パーマリンク(Permalink)は、恒久・不変を意味する「パーマネント」(permanent)と「リンク」(link)が掛け合わされた造語である。
端的に言うと、ブログ内の個々のエントリーに対する、ユニークな名前のことです。これを、WordPressを使っている多くのブログサイトではURLになるように設定しています。弊社ブログもそのようにしています。
パーマリンクに日本語を使いたくない
このパーマリンクですが、日本語も使えるようになっています。その場合はURLエンコードされるので、URL自体は日本語を使わない場合と比べると長くなってしまいます。
例えば、以下のようなパーマリンクにしたい場合、
https://dev.classmethod.jp/tool/wordpress/日本語のブログだよ
以下のようになります。
https://dev.classmethod.jp/tool/wordpress/%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%81%ae%e3%83%96%e3%83%ad%e3%82%b0%e3%81%a0%e3%82%88
こうなってしまった場合、エントリーがシェアしづらくなる問題を抱えてしまうことになります。
- 文字数制限のあるサービスでシェアできない
- URLで紹介される可能性が低くなる(心理的にシェアしづらくなる)
以下の記事でも解説されていますので、あわせてお読みください。
こうなってしまわないように、WordPressをカスタマイズすることで解決できる方法を考えました。
WordPressをカスタマイズする
今回は下記の機能を作りました。
- 記事の編集画面を開いたときに発動する
- パーマリンクを正規表現にマッチしなかった場合にアラートを表示する
- 保存自体を弾くことは行わない
- 処理が複雑になってしまうため、シンプルにアラートだけ出すようにしている
まず wp-content/themes/<任意のテーマ>
の中に、下記のファイルを作成します。
<?php /* ***************************** * * パーマリンクを検証する * **************************** */ add_action('admin_notices', 'validate_permalink'); function validate_permalink() { global $pagenow; if ($pagenow == 'post.php') { $post_name = get_post()->post_name; $decoded = urldecode($post_name); if (!preg_match('/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/', $decoded)) { echo '<div class="message error"><p>パーマリンク(URL)に日本語が含まれています!修正してから公開してください。</p></div>'; } } }
解説します。
まずこのアクション自体は admin_notices
をフックしていますので、管理画面のいずれかを開くたびに発動します。11行目では post.php
(つまり、記事の編集画面) の場合のみ処理するようにしています。
12行目で post_name
からパーマリンクを拾ってきています。この時点でURLエンコードされた状態で取得できるので、13行目でデコードしてから検証を行なっています。そうしなければ、URLエンコードされた文字列の状態で検証してしまうことになり、日本語として弾くことができません。
15行目では message error
というクラスを使うことにより、WordPressの管理画面のエラーメッセージとして出力しています。
あとは、このファイルを functions.php
で読むように設定するだけです。
require( dirname(__FILE__) . 'validate_permalink.php' );
動作確認
ということで、動作を確認してみます。記事を新規作成し、パーマリンクが日本語の状態で保存します。
エラーが表示されました。これを修正すると…
エラーが消えます!
まとめ
正規表現の部分はカスタマイズすれば「ある文字列だけ除外する」ということもできますし、「記号すら許さない」なんてこともできます。
日本語でパーマリンクを作りたくない場合、ぜひ試してみてください。
参考
本記事に執筆にあたり、下記のブログを参考にしました。